<html><head><meta charset="utf-8"/><title>REST</title></head><body><h1>REST</h1><div class="x-wiki-content x-main-content">
 <p>
  自从Roy Fielding博士在2000年他的博士论文中提出
  <a href="http://zh.wikipedia.org/wiki/REST">
   REST
  </a>
  （Representational State Transfer）风格的软件架构模式后，REST就基本上迅速取代了复杂而笨重的SOAP，成为Web API的标准了。
 </p>
 <p>
  什么是Web API呢？
 </p>
 <p>
  如果我们想要获取某个电商网站的某个商品，输入
  <code>
   http://localhost:3000/products/123
  </code>
  ，就可以看到id为123的商品页面，但这个结果是HTML页面，它同时混合包含了Product的数据和Product的展示两个部分。对于用户来说，阅读起来没有问题，但是，如果机器读取，就很难从HTML中解析出Product的数据。
 </p>
 <p>
  如果一个URL返回的不是HTML，而是机器能直接解析的数据，这个URL就可以看成是一个Web API。比如，读取
  <code>
   http://localhost:3000/api/products/123
  </code>
  ，如果能直接返回Product的数据，那么机器就可以直接读取。
 </p>
 <p>
  REST就是一种设计API的模式。最常用的数据格式是JSON。由于JSON能直接被JavaScript读取，所以，以JSON格式编写的REST风格的API具有简单、易读、易用的特点。
 </p>
 <p>
  编写API有什么好处呢？由于API就是把Web App的功能全部封装了，所以，通过API操作数据，可以极大地把前端和后端的代码隔离，使得后端代码易于测试，前端代码编写更简单。
 </p>
 <p>
  此外，如果我们把前端页面看作是一种用于展示的客户端，那么API就是为客户端提供数据、操作数据的接口。这种设计可以获得极高的扩展性。例如，当用户需要在手机上购买商品时，只需要开发针对iOS和Android的两个客户端，通过客户端访问API，就可以完成通过浏览器页面提供的功能，而后端代码基本无需改动。
 </p>
 <p>
  当一个Web应用以API的形式对外提供功能时，整个应用的结构就扩展为：
 </p>
 <p>
  <img alt="REST-arch" data-src="/files/attachments/1105002734527584/l" src="https://www.liaoxuefeng.com/files/attachments/1105002734527584/l"/>
 </p>
 <p>
  把网页视为一种客户端，是REST架构可扩展的一个关键。
 </p>
</div>
</body></html>